general.tsx 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { IS_PLATFORM } from 'common'
  2. import { useRouter } from 'next/router'
  3. import { useEffect } from 'react'
  4. import { PageContainer } from 'ui-patterns/PageContainer'
  5. import {
  6. PageHeader,
  7. PageHeaderDescription,
  8. PageHeaderMeta,
  9. PageHeaderSummary,
  10. PageHeaderTitle,
  11. } from 'ui-patterns/PageHeader'
  12. import { subscriptionHasHipaaAddon } from '@/components/interfaces/Billing/Subscription/Subscription.utils'
  13. import { ComplianceConfig } from '@/components/interfaces/Settings/General/ComplianceConfig/ProjectComplianceMode'
  14. import { CustomDomainConfig } from '@/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig'
  15. import { DeleteProjectPanel } from '@/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel'
  16. import { General } from '@/components/interfaces/Settings/General/General'
  17. import { Project } from '@/components/interfaces/Settings/General/Project'
  18. import { TransferProjectPanel } from '@/components/interfaces/Settings/General/TransferProjectPanel/TransferProjectPanel'
  19. import DefaultLayout from '@/components/layouts/DefaultLayout'
  20. import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout'
  21. import { useOrgSubscriptionQuery } from '@/data/subscriptions/org-subscription-query'
  22. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  23. import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
  24. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  25. import type { NextPageWithLayout } from '@/types'
  26. const ProjectSettings: NextPageWithLayout = () => {
  27. const { data: project } = useSelectedProjectQuery()
  28. const { data: selectedOrganization } = useSelectedOrganizationQuery()
  29. const isBranch = !!project?.parent_project_ref
  30. const { projectsTransfer: projectTransferEnabled, projectSettingsCustomDomains } =
  31. useIsFeatureEnabled(['projects:transfer', 'project_settings:custom_domains'])
  32. const router = useRouter()
  33. useEffect(() => {
  34. if (!IS_PLATFORM) {
  35. router.push(`/project/default/settings/log-drains`)
  36. }
  37. }, [router])
  38. const { data: subscription } = useOrgSubscriptionQuery({ orgSlug: selectedOrganization?.slug })
  39. const hasHipaaAddon = subscriptionHasHipaaAddon(subscription)
  40. return (
  41. <>
  42. <PageHeader size="small">
  43. <PageHeaderMeta>
  44. <PageHeaderSummary>
  45. <PageHeaderTitle>Project Settings</PageHeaderTitle>
  46. <PageHeaderDescription>
  47. General configuration, domains, ownership, and lifecycle
  48. </PageHeaderDescription>
  49. </PageHeaderSummary>
  50. </PageHeaderMeta>
  51. </PageHeader>
  52. <PageContainer size="small">
  53. <General />
  54. <Project />
  55. {/* this is only settable on compliance orgs, currently that means HIPAA orgs */}
  56. {!isBranch && hasHipaaAddon && <ComplianceConfig />}
  57. {projectSettingsCustomDomains && <CustomDomainConfig />}
  58. {!isBranch && projectTransferEnabled && <TransferProjectPanel />}
  59. {!isBranch && <DeleteProjectPanel />}
  60. </PageContainer>
  61. </>
  62. )
  63. }
  64. ProjectSettings.getLayout = (page) => (
  65. <DefaultLayout>
  66. <SettingsLayout title="general">{page}</SettingsLayout>
  67. </DefaultLayout>
  68. )
  69. export default ProjectSettings